#include <iostream>
using namespace std;


class String
{
public:
 String(char* str = "")
 :_str(new char[strlen(str)+1])
 {
 strcpy(_str, str);
 }

 //传统写法，开辟空间
 String(const String& s)
 {
 _str = new(char[strlen(s._str) + 1]);
 strcpy(_str, s._str);
 }

 //现代写法，利用构造函数
 //String(const String& s)
 // :_str(NULL)
 //{
 // String tmp(s._str);
 // swap(_str, tmp._str);
 //}

 //****************赋值运算符重载**************
 //String& operator=(const String& s)
 //{
 // if (this != &s)
 // {
 // delete[] _str;
 // _str = new char[strlen(s._str) + 1];
 // strcpy(_str, s._str);
 // }
 // return *this;
 //}

 //****************赋值运算符重载**************
 String& operator=(String& s)
 {
 swap(_str, s._str);
 return *this;
 }

 //***************析构函数********************
 ~String()
 {
 if (_str)
 {
  delete[] _str;
 }
 }

private:
 char* _str;
};